package LimitedTimeGame.Day_0301;

/**
 * @author zxc
 * @date 2023/03/01 09:14
 **/

/**
 * 题目 ：矩阵中局部最大值
 * 题目详述 ：
 * 给你一个大小为 n x n 的整数矩阵 grid 。
 * 生成一个大小为(n - 2) x (n - 2) 的整数矩阵 maxLocal ，并满足：
 * maxLocal[i][j] 等于 grid 中以 i + 1 行和 j + 1 列为中心的 3 x 3 矩阵中的 最大值 。
 * 换句话说，我们希望找出 grid 中每个3 x 3 矩阵中的最大值。
 * 返回生成的矩阵。
 *
 * 提示：
 * n == grid.length == grid[i].length
 * 3 <= n <= 100
 * 1 <= grid[i][j] <= 100
 *
 */
public class LargestLocal {
    /**
     * 思路 ：
     * （1）首先，获取到grid数组的大小n;
     * （2）遍历grid数组（1，1） ~ （n - 1 ， n - 1）;
     * （3）遍历每一个 3 * 3的数组，获取其中可能的最大值;
     * @param grid
     * @return
     */
    public int[][] largestLocal(int[][] grid) {
        int len = grid.length;
        int[][] result = new int[len - 2][len - 2];
        for(int i = 1 ; i < len - 1 ; i++){
            for(int j = 1 ; j < len - 1 ; j++){
                result[i - 1][j - 1] = maxNumber(grid , i , j);
            }
        }
        return result;
    }
    // 获取 3 * 3矩阵中的最大值;
    private int maxNumber(int[][] grid, int i, int j) {
        int max = 0;
        for(int m = i - 1 ; m < i + 2 ; m++){
            for(int n = j - 1 ; n < j + 2 ; n++){
                max = Math.max(max , grid[m][n]);
            }
        }
        return max;
    }
}
